package davey.wu.hamcrest.extend;

import org.jmock.Expectations;

import davey.wu.hamcrest.expected.BooleanExpected;
import davey.wu.hamcrest.expected.ByteExpected;
import davey.wu.hamcrest.expected.DoubleExpected;
import davey.wu.hamcrest.expected.EntityExpected;
import davey.wu.hamcrest.expected.FloatExpected;
import davey.wu.hamcrest.expected.IntegerExpected;
import davey.wu.hamcrest.expected.LongExpected;
import davey.wu.hamcrest.expected.ShortExpected;
import davey.wu.hamcrest.expected.StringExpected;
import davey.wu.hamcrest.expected.interdef.BooleanExpectedOp;
import davey.wu.hamcrest.expected.interdef.ByteExpectedOp;
import davey.wu.hamcrest.expected.interdef.DoubleExpectedOp;
import davey.wu.hamcrest.expected.interdef.EntityExpectedOp;
import davey.wu.hamcrest.expected.interdef.FloatExpectedOp;
import davey.wu.hamcrest.expected.interdef.IntegerExpectedOp;
import davey.wu.hamcrest.expected.interdef.LongExpectedOp;
import davey.wu.hamcrest.expected.interdef.ShortExpectedOp;
import davey.wu.hamcrest.expected.interdef.StringExpectedOp;

public class ExtExpectations extends Expectations {
	public <T> EntityExpectedOp<T> want(Class<T> claz) {
		EntityExpected<T> expected = new EntityExpected<T>(claz, EntityExpectedOp.class);
		return expected;
	}

	public StringExpectedOp want(Class<String> claz) {
		StringExpected expected = new StringExpected(String.class, StringExpectedOp.class);
		return expected;
	}

	public IntegerExpectedOp want(Class<Integer> claz) {
		IntegerExpected expected = new IntegerExpected(Integer.class, IntegerExpectedOp.class);
		return expected;
	}

	public ShortExpectedOp want(Class<Short> claz) {
		ShortExpected expected = new ShortExpected(Short.class, ShortExpectedOp.class);
		return expected;
	}

	public LongExpectedOp want(Class<Long> claz) {
		LongExpected expected = new LongExpected(Long.class, LongExpectedOp.class);
		return expected;
	}

	public ByteExpectedOp want(Class<Byte> claz) {
		ByteExpected expected = new ByteExpected(Byte.class, ByteExpectedOp.class);
		return expected;
	}

	public DoubleExpectedOp want(Class<Double> claz) {
		DoubleExpected expected = new DoubleExpected(Double.class, DoubleExpectedOp.class);
		return expected;
	}

	public FloatExpectedOp want(Class<Float> claz) {
		FloatExpected expected = new FloatExpected(Float.class, FloatExpectedOp.class);
		return expected;
	}

	public BooleanExpectedOp want(Class<Boolean> claz) {
		BooleanExpected expected = new BooleanExpected(Boolean.class, BooleanExpectedOp.class);
		return expected;
	}
}
